在我們開始探索 Grafana 的可觀測性宇宙前,我們需要知道 Kubernetes 在其中所扮演的重要角色,他已經逐漸成為現代雲原生應用服務與容器編排服務的唯一指標,每當我們討論到可觀測性時,事實上我們正在討論的是一個高度動態、分佈式且複雜的環境,這正是 Kubernetes 強項所在,這時我們需要一個強大且靈活的可視化監控系統,以確保我們總是可以迅速定位和解決問題。
通過 Grafana,我們可以獲得對 Kubernetes 環境的全面視圖,包括容器、節點、網絡和存儲等各方面。Grafana 的可觀測性工具讓我們能夠有效地監控、追踪和日誌在 Kubernetes 上運行的所有應用服務,在接下來的文章中我們將深入探討Kubernetes 如何影響我們的可觀測性策略,以及 Grafana 如何幫助我們應對這些挑戰。
Kubernetes
是一個可移植、可擴展的開源平台,用於管理容器化的工作負載和服務,可促進聲明式配置和自動化。Kubernetes
擁有一個龐大且快速增長的生態,其服務、支持和工具的使用範圍相當廣泛。
Kubernetes
這個名字起源於希臘文,意思為 “舵手” 或是 “飛行員”,最初是由 Google 的工程師們設計開發並且在 2014 年首次對外宣布,Kubernetes
v1.0 於 2015 年 7 月 21 日釋出並且 Google 與 Linux 基金會合作組建了 Cloud Native Computeing Foundation (CNCF)
來, 有趣的是官方證實了一個都市傳說就是 k8s
這個縮寫是因為 k 跟 s 之間有八個英文字符的關係。
早期的應用程式多半是在物理伺服器上建構而成,由於無法限制物理伺服器中運行的應用程式資源使用,因此產生資源分配的問題,而在早期的解決方案就是將每個應用程式都分別運行在不同的物理伺服器上,除了物理伺服器高昂的維護成本之外,也產生了一個問題就是當某個伺服器資源使用率不高時,剩餘資源無法分配給其他應用程式,看到上述問題的痛點是不是也有感而發的想到那為何不在同一台物理伺服器上使用虛擬隔離呢,於是前人們就在這個問題點上造就了下個時代的技術演進。
因此,虛擬化技術漸漸被引入,虛擬化技術允許在單個物理單位的伺服器上運作多個虛擬環境 (VM) ,使各種應用程式在不同的 VM 之間被安全的彼此隔離。虛擬化技術使物理伺服器可以更有效地利用資源或更新應用程式,因此具有更高的可伸縮性,以及降低硬件成本的好處。
而我們從上圖可以發現每個 VM 都是一個完整的操作系統,每次開啟都需要建立一個完整的系統環境才能開始運行,同樣也會造就啟用的服務不需要用到全部的資源造成資源浪費,看到這裡我們又可以很合理的聯想到現代開發離不開的容器化技術,像是 Docker、以及本系列介紹的 kubenetes。
容器類似算 VM,但是具有更寬鬆的隔離特性,各個容器之間可以共享操作系統,只需要安裝自己需要用的應用程式即可,可以避免不需要的資源浪費,達到更輕量的概念但同時每個容器可以擁有自己的文件系統、CPU、內存、進程空間等。
容器為現代開發的趨勢。以下為容器化的一些好處:
Kubernetes 不僅是一個自動化容器編排的工具,它的核心優勢在於能夠自動部署、擴展和管理容器化應用。在實際的工作負載下,當流量增加,Kubernetes 能夠自動分配這些負載,確保各個容器的最佳效能,且當某個容器失效時,它具有自我修復的能力,可以自動替換和重新啟動失效的容器,確保服務的持續運行。
這些特色使得 Kubernetes 在容器化為王的時代下,特別適合於建立微服務架構。在這樣的架構中,應用會被切分成數個小型的、獨立運行的服務,並且 Kubernetes 提供了強大的工具來部署、管理和橫向擴展這些服務。此外,Kubernetes 也經常被用於持續集成和持續部署(CI/CD)的流程中,使得開發者能夠更迅速且安全地更新他們的應用。而當需要更多的運行資源時,Kubernetes 能夠迅速地擴展應用,以滿足需求。
更重要的是,Kubernetes 的設計使其成為跨多雲和混合雲環境的理想選擇。無論是公有雲、私有雲還是兩者的組合,Kubernetes 都可以統一管理和部署應用,為企業提供了極大的靈活性。
在寫這篇文章的同時,我們迎接來 Kubernetes 了 v1.28 的小版號更新,不經讚嘆 Kubernetes 社群穩定快速迭代的步調。
Kubernetes 1.28 在 2023 年正式推出,是當年的第二個版本,相隔前一版本已四個月。這次更新帶來了 45 項的增強功能,分別有 19 項新進入 Alpha,14 項升級至 Beta,以及 12 項達到了穩定版。該版本以「Planternetes」為主題,象徵著社區成員猶如種植者,共同培育 Kubernetes 使其茁壯成長。
其中特別值得關注的功能有:
從幾年前第一次接觸 Docker 那刻起,我就被它帶入了一個全新的世界。當時的我深受其衝擊,並對這種新體驗難以忘懷。我驚訝於 Docker 能如此便利地容器化服務並提升其穿透性,更棒的是它的易於傳播特性,可以輕鬆地在各種平台上運行。那時我剛開始涉足網路世界,只需要簡單的指令,就能拉取或建立所需的 Image,每次更新功能或啟動服務都讓我感到興奮。在我看來,這仿佛已達到人生的巔峰。但當我後來接觸到 Kubernetes,我才意識到,之前的我只是站在人生中的一座愚昧山丘上。Kubernetes 讓我見識到了更加廣闊的技術領域,激起了我對這個永無止境的探索之旅的好奇心。讓我們一起繼續這場旅程,尋找下一座待征服的愚昧山丘吧。
相關程式碼同步收錄在:
https://github.com/MikeHsu0618/grafana-stack-in-kubernetes/tree/main/day2